From: kaf24@firebug.cl.cam.ac.uk Date: Fri, 19 May 2006 14:35:19 +0000 (+0100) Subject: Introduce is_running_on_xen() to test whether we are running on Xen before X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~16047^2~28 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success//%22http:/www.example.com/cgi/success/?a=commitdiff_plain;h=c00e364b1ff9c189586b691a735c7acde7e62757;p=xen.git Introduce is_running_on_xen() to test whether we are running on Xen before initialising a Xen-specific driver or subsystem. For ia64: * Call xen_init in setup_arch. * Remove xen_ksyms.c Signed-off-by: Tristan Gingold --- diff --git a/linux-2.6-xen-sparse/arch/i386/kernel/swiotlb.c b/linux-2.6-xen-sparse/arch/i386/kernel/swiotlb.c index 936dbb7eff..e65ebf681f 100644 --- a/linux-2.6-xen-sparse/arch/i386/kernel/swiotlb.c +++ b/linux-2.6-xen-sparse/arch/i386/kernel/swiotlb.c @@ -191,6 +191,7 @@ swiotlb_init(void) if (swiotlb_force == 1) { swiotlb = 1; } else if ((swiotlb_force != -1) && + is_running_on_xen() && (xen_start_info->flags & SIF_INITDOMAIN)) { /* Domain 0 always has a swiotlb. */ ram_end = HYPERVISOR_memory_op(XENMEM_maximum_ram_page, NULL); diff --git a/linux-2.6-xen-sparse/arch/ia64/kernel/setup.c b/linux-2.6-xen-sparse/arch/ia64/kernel/setup.c index a6ac8f6b84..6f30d48608 100644 --- a/linux-2.6-xen-sparse/arch/ia64/kernel/setup.c +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/setup.c @@ -514,6 +514,9 @@ setup_arch (char **cmdline_p) #ifdef CONFIG_XEN if (running_on_xen) { extern shared_info_t *HYPERVISOR_shared_info; + extern int xen_init (void); + + xen_init (); /* xen_start_info isn't setup yet, get the flags manually */ if (HYPERVISOR_shared_info->arch.flags & SIF_INITDOMAIN) { diff --git a/linux-2.6-xen-sparse/arch/ia64/xen/Makefile b/linux-2.6-xen-sparse/arch/ia64/xen/Makefile index 833680cccf..5794a4136c 100644 --- a/linux-2.6-xen-sparse/arch/ia64/xen/Makefile +++ b/linux-2.6-xen-sparse/arch/ia64/xen/Makefile @@ -2,7 +2,7 @@ # Makefile for Xen components # -obj-y := hypercall.o xenivt.o xenentry.o xensetup.o xenpal.o xenhpski.o xenconsole.o xen_ksyms.o +obj-y := hypercall.o xenivt.o xenentry.o xensetup.o xenpal.o xenhpski.o xenconsole.o obj-$(CONFIG_XEN_IA64_DOM0_VP) += hypervisor.o pci-dma-xen.o -pci-dma-xen-$(CONFIG_XEN_IA64_DOM0_VP) := ../../i386/kernel/pci-dma-xen.o \ No newline at end of file +pci-dma-xen-$(CONFIG_XEN_IA64_DOM0_VP) := ../../i386/kernel/pci-dma-xen.o diff --git a/linux-2.6-xen-sparse/arch/ia64/xen/drivers/xenia64_init.c b/linux-2.6-xen-sparse/arch/ia64/xen/drivers/xenia64_init.c index 58403804fb..54517f8fe6 100644 --- a/linux-2.6-xen-sparse/arch/ia64/xen/drivers/xenia64_init.c +++ b/linux-2.6-xen-sparse/arch/ia64/xen/drivers/xenia64_init.c @@ -11,17 +11,20 @@ shared_info_t *HYPERVISOR_shared_info = (shared_info_t *)XSI_BASE; EXPORT_SYMBOL(HYPERVISOR_shared_info); -static int initialized; start_info_t *xen_start_info; +int running_on_xen; +EXPORT_SYMBOL(running_on_xen); + int xen_init(void) { + static int initialized; shared_info_t *s = HYPERVISOR_shared_info; if (initialized) return running_on_xen ? 0 : -1; - if (!running_on_xen) + if (!is_running_on_xen()) return -1; xen_start_info = __va(s->arch.start_info_pfn << PAGE_SHIFT); diff --git a/linux-2.6-xen-sparse/arch/ia64/xen/xen_ksyms.c b/linux-2.6-xen-sparse/arch/ia64/xen/xen_ksyms.c deleted file mode 100644 index 83cff0b0c4..0000000000 --- a/linux-2.6-xen-sparse/arch/ia64/xen/xen_ksyms.c +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Architecture-specific kernel symbols - * - * Don't put any exports here unless it's defined in an assembler file. - * All other exports should be put directly after the definition. - */ - -#include -#include - -extern int is_running_on_xen(void); -EXPORT_SYMBOL(is_running_on_xen); diff --git a/linux-2.6-xen-sparse/arch/ia64/xen/xensetup.S b/linux-2.6-xen-sparse/arch/ia64/xen/xensetup.S index c611974d78..5c41876bc5 100644 --- a/linux-2.6-xen-sparse/arch/ia64/xen/xensetup.S +++ b/linux-2.6-xen-sparse/arch/ia64/xen/xensetup.S @@ -8,12 +8,6 @@ #include #include - .data - .align 8 - .globl running_on_xen -running_on_xen: - data4 0 - #define isBP p3 // are we the Bootstrap Processor? .text @@ -27,9 +21,3 @@ GLOBAL_ENTRY(early_xen_setup) (p7) mov cr.iva=r10 br.ret.sptk.many rp;; END(early_xen_setup) - -GLOBAL_ENTRY(is_running_on_xen) - movl r9=running_on_xen;; - ld4 r8=[r9] - br.ret.sptk.many rp;; -END(is_running_on_xen) diff --git a/linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c b/linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c index 13b5c95a6f..a0ea8d1160 100644 --- a/linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c +++ b/linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c @@ -468,8 +468,8 @@ static int __init balloon_init(void) IPRINTK("Initialising balloon driver.\n"); - if (xen_init() < 0) - return -1; + if (!is_running_on_xen()) + return -ENODEV; current_pages = min(xen_start_info->nr_pages, max_pfn); totalram_pages = current_pages; diff --git a/linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c b/linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c index addc9369a2..39daafe43c 100644 --- a/linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c +++ b/linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c @@ -526,7 +526,7 @@ static int __init blkif_init(void) struct page *page; int i; - if (xen_init() < 0) + if (!is_running_on_xen()) return -ENODEV; mmap_pages = blkif_reqs * BLKIF_MAX_SEGMENTS_PER_REQUEST; diff --git a/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c b/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c index 57b5c27592..f8e45efa47 100644 --- a/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c +++ b/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c @@ -792,7 +792,7 @@ static struct xenbus_driver blkfront = { static int __init xlblk_init(void) { - if (xen_init() < 0) + if (!is_running_on_xen()) return -ENODEV; return xenbus_register_frontend(&blkfront); diff --git a/linux-2.6-xen-sparse/drivers/xen/console/console.c b/linux-2.6-xen-sparse/drivers/xen/console/console.c index b5438f20c9..de0a1e3457 100644 --- a/linux-2.6-xen-sparse/drivers/xen/console/console.c +++ b/linux-2.6-xen-sparse/drivers/xen/console/console.c @@ -183,7 +183,7 @@ static struct console kcons_info = { #define __RETCODE 0 static int __init xen_console_init(void) { - if (xen_init() < 0) + if (!is_running_on_xen()) return __RETCODE; if (xen_start_info->flags & SIF_INITDOMAIN) { @@ -566,7 +566,7 @@ static int __init xencons_init(void) { int rc; - if (xen_init() < 0) + if (!is_running_on_xen()) return -ENODEV; if (xc_mode == XC_OFF) diff --git a/linux-2.6-xen-sparse/drivers/xen/core/gnttab.c b/linux-2.6-xen-sparse/drivers/xen/core/gnttab.c index 7355073966..0b288e61b2 100644 --- a/linux-2.6-xen-sparse/drivers/xen/core/gnttab.c +++ b/linux-2.6-xen-sparse/drivers/xen/core/gnttab.c @@ -443,7 +443,7 @@ gnttab_init(void) { int i; - if (xen_init() < 0) + if (!is_running_on_xen()) return -ENODEV; if (gnttab_resume() < 0) diff --git a/linux-2.6-xen-sparse/drivers/xen/core/hypervisor_sysfs.c b/linux-2.6-xen-sparse/drivers/xen/core/hypervisor_sysfs.c index f9639028d2..42ee6a8148 100644 --- a/linux-2.6-xen-sparse/drivers/xen/core/hypervisor_sysfs.c +++ b/linux-2.6-xen-sparse/drivers/xen/core/hypervisor_sysfs.c @@ -49,6 +49,9 @@ static struct kobj_type hyp_sysfs_kobj_type = { static int __init hypervisor_subsys_init(void) { + if (!is_running_on_xen()) + return -ENODEV; + hypervisor_subsys.kset.kobj.ktype = &hyp_sysfs_kobj_type; return subsystem_register(&hypervisor_subsys); } diff --git a/linux-2.6-xen-sparse/drivers/xen/core/xen_sysfs.c b/linux-2.6-xen-sparse/drivers/xen/core/xen_sysfs.c index e26ab7f003..abe52d5a8b 100644 --- a/linux-2.6-xen-sparse/drivers/xen/core/xen_sysfs.c +++ b/linux-2.6-xen-sparse/drivers/xen/core/xen_sysfs.c @@ -276,7 +276,12 @@ static void xen_properties_destroy(void) static int __init hyper_sysfs_init(void) { - int ret = xen_sysfs_type_init(); + int ret; + + if (!is_running_on_xen()) + return -ENODEV; + + ret = xen_sysfs_type_init(); if (ret) goto out; ret = xen_sysfs_version_init(); diff --git a/linux-2.6-xen-sparse/drivers/xen/evtchn/evtchn.c b/linux-2.6-xen-sparse/drivers/xen/evtchn/evtchn.c index 2c8623392e..9e8503f34b 100644 --- a/linux-2.6-xen-sparse/drivers/xen/evtchn/evtchn.c +++ b/linux-2.6-xen-sparse/drivers/xen/evtchn/evtchn.c @@ -429,6 +429,9 @@ static int __init evtchn_init(void) { int err; + if (!is_running_on_xen()) + return -ENODEV; + spin_lock_init(&port_user_lock); memset(port_user, 0, sizeof(port_user)); diff --git a/linux-2.6-xen-sparse/drivers/xen/netback/netback.c b/linux-2.6-xen-sparse/drivers/xen/netback/netback.c index 3aee0a1d81..a6f5080bfd 100644 --- a/linux-2.6-xen-sparse/drivers/xen/netback/netback.c +++ b/linux-2.6-xen-sparse/drivers/xen/netback/netback.c @@ -810,6 +810,9 @@ static int __init netback_init(void) int i; struct page *page; + if (!is_running_on_xen()) + return -ENODEV; + /* We can increase reservation by this much in net_rx_action(). */ balloon_update_driver_allowance(NET_RX_RING_SIZE); diff --git a/linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c b/linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c index 9c0df415c2..2fdc373dcd 100644 --- a/linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c +++ b/linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c @@ -1454,6 +1454,9 @@ static struct notifier_block notifier_inetdev = { static int __init netif_init(void) { + if (!is_running_on_xen()) + return -ENODEV; + if (xen_start_info->flags & SIF_INITDOMAIN) return 0; diff --git a/linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c b/linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c index 477c7a1f3a..0c8b449348 100644 --- a/linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c +++ b/linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c @@ -271,6 +271,9 @@ static int capabilities_read(char *page, char **start, off_t off, static int __init privcmd_init(void) { + if (!is_running_on_xen()) + return -ENODEV; + /* Set of hypercalls that privileged applications may execute. */ set_bit(__HYPERVISOR_acm_op, hypercall_permission_map); set_bit(__HYPERVISOR_dom0_op, hypercall_permission_map); diff --git a/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c b/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c index 67134b060a..f410395d19 100644 --- a/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c +++ b/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c @@ -966,10 +966,8 @@ static int __init xenbus_probe_init(void) DPRINTK(""); - if (xen_init() < 0) { - DPRINTK("failed"); + if (!is_running_on_xen()) return -ENODEV; - } /* Register ourselves with the kernel bus subsystem */ bus_register(&xenbus_frontend.bus); @@ -1069,10 +1067,8 @@ static int __init wait_for_devices(void) { unsigned long timeout = jiffies + 10*HZ; - if (xen_init() < 0) { - DPRINTK("failed"); + if (!is_running_on_xen()) return -ENODEV; - } while (time_before(jiffies, timeout)) { if (all_devices_ready()) diff --git a/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/hypervisor.h b/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/hypervisor.h index e4ec1309d3..29b7b26807 100644 --- a/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/hypervisor.h +++ b/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/hypervisor.h @@ -118,7 +118,7 @@ u64 jiffies_to_st(unsigned long jiffies); #define MULTI_UVMDOMID_INDEX 4 #endif -#define xen_init() (0) +#define is_running_on_xen() 1 static inline int HYPERVISOR_yield( diff --git a/linux-2.6-xen-sparse/include/asm-ia64/hypervisor.h b/linux-2.6-xen-sparse/include/asm-ia64/hypervisor.h index 208c392fcc..281b1af3cb 100644 --- a/linux-2.6-xen-sparse/include/asm-ia64/hypervisor.h +++ b/linux-2.6-xen-sparse/include/asm-ia64/hypervisor.h @@ -53,7 +53,7 @@ extern start_info_t *xen_start_info; void force_evtchn_callback(void); -int xen_init(void); +#define is_running_on_xen() running_on_xen /* Turn jiffies into Xen system time. XXX Implement me. */ #define jiffies_to_st(j) 0 @@ -147,7 +147,7 @@ xen_create_contiguous_region(unsigned long vstart, unsigned int order, unsigned int address_bits) { int ret = 0; - if (running_on_xen) { + if (is_running_on_xen()) { ret = __xen_create_contiguous_region(vstart, order, address_bits); } @@ -158,7 +158,7 @@ void __xen_destroy_contiguous_region(unsigned long vstart, unsigned int order); static inline void xen_destroy_contiguous_region(unsigned long vstart, unsigned int order) { - if (running_on_xen) + if (is_running_on_xen()) __xen_destroy_contiguous_region(vstart, order); } #else diff --git a/linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h b/linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h index db737b3940..29ff8820dd 100644 --- a/linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h +++ b/linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h @@ -41,12 +41,7 @@ #endif #ifndef __ASSEMBLY__ -#ifdef MODULE -extern int is_running_on_xen(void); -#define running_on_xen (is_running_on_xen()) -#else extern int running_on_xen; -#endif #define XEN_HYPER_SSM_I asm("break 0x7"); #define XEN_HYPER_GET_IVR asm("break 0x8");